SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE PROCEDURE [dbo].[pje_porConcursosGanados] @idinscripcion integer,@pje float output, @resultado as integer output AS
SET NOCOUNT ON
declare  @idAgente as int,@CargoGenerico as int,@AsignaturaGenerica as int, @idTipoConvocatoria as int ,@fechaLimite as datetime,@nivel_insc as int,@ciclo as int

declare @pje_total as float, @rubro as integer,@tipo as integer,@topeConcursosA as float,@TopeConcursosB as float, @puntaje1 as float,@puntaje2 as float
declare @sum as float
declare @grupoIncumbencia as int, @grupoincumbencia2 as int
declare @nivelDelCargo as int
DECLARE @Error INT

BEGIN TRANSACTION
SET @ERROR=0


select @topeConcursosA =(select isnull(valor,2) from tb_topetiposantecedentes where rubro=3 and TipoAntecedente =22 ) -- leo el  tope por conc.ganados por titulos y antecedentes 
select @topeConcursosB =(select isnull(valor,4) from tb_topetiposantecedentes where rubro=3 and TipoAntecedente =23 ) -- leo el  tope  por conc.ganados por antecedentes y oposición

select  @idAgente=i.Agente,@cargoGenerico = i.CargoGenerico,@AsignaturaGenerica=i.AsignaturaGenerica,@idtipoConvocatoria=Conv.TipoConvocatoria,@FechaLimite=Conv.FechaLimite,@nivel_insc=i.nivel,@ciclo = ciclo
	from 
	tb_inscripcionesConvocatorias i 
		join tb_Convocatorias conv on i.Convocatoria=conv.idConvocatoria 
	where i.idInscripcionConvocatoria=@idInscripcion


select @nivelDelCargo=nivel from tb_cargosGenericos where @cargoGenerico=idcargogenerico --leo el  nivel del cargo en el que se inscribió 
--Corrección para 3er ciclo (pasa a ser polimodal)
if @nivel_insc = 3 and @ciclo = 2 set  @nivel_insc=4

if @nivelDelCargo in (select distinct nivel from  tb_concursosGanados cg join tb_cargosgenericos c on cg.cargo=c.idcargogenerico where agente=@idAgente) print 'Siiiiiiiiiii' else print 'noooooooooooo'


select @grupoIncumbencia=case
	when @nivel_insc = 2 then 572
	when @nivel_insc = 3 then 573
	when @nivel_insc = 4 then 571
end

select @grupoIncumbencia2=case
	when @nivel_insc = 2 then 570
	when @nivel_insc = 3 then 570
	when @nivel_insc = 4 then 571
end


if  @idTipoConvocatoria in (1,9) and @nivelDelCargo in (select distinct nivel from  tb_concursosGanados cg join tb_cargosgenericos c on cg.cargo=c.idcargogenerico where agente=@idAgente) --    TipoConvocatoria = 1 ingreso,interinatos y suplencias (Se valoran los concursos ganados dentro del mismo nivel )
	begin
			declare c cursor FORWARD_ONLY FOR
			select isnull (1*COUNT(*),0) puntaje1 from 
				tb_concursosGanados CG
				join tb_gruposDeIncumbencias G on G.idGrupoIncumbencia=CG.GrupoIncumbencias
--				join tb_reluniongsgu R on r.idgrupounion = G.idGrupoIncumbencia
				join tb_incumbencias h on G.idGrupoIncumbencia=h.grupoIncumbencia
			  WHERE AGENTE=@idAgente AND TipoConcurso = 1 and CG.FechaPresentacion <= @FechaLimite
			 and (h.CargoGenerico=@Cargogenerico  and h.AsignaturaGenerica=@AsignaturaGenerica or  CG.grupoincumbencias =99) --and (h.grupoIncumbencia= @grupoIncumbencia  or h.grupoIncumbencia= @grupoIncumbencia2) -- CUENTO LOS CONCURSOS GANADOS POR TITULOS Y ANTECEDENTES
		SET @Error = @@ERROR 
		IF @Error <> 0 GOTO Salir

			open c
			fetch next from c into @sum
			set @puntaje1=0
			while @@FETCH_STATUS = 0

			begin
				set @puntaje1=@puntaje1+ @sum
				fetch next from c into @sum
			end

			close c
			deallocate c
			print 'puntaje 1 ......tipoConvocat 1 o 9.............>'
			print @puntaje1

			if  @puntaje1 > @topeConcursosA set @puntaje1 = @topeConcursosA --TIENE TOPE DE 2 PUNTOS
		
			declare c cursor FORWARD_ONLY FOR
			select isnull (1*COUNT(*),0) puntaje2 from 
				tb_concursosGanados CG
				join tb_gruposDeIncumbencias G on G.idGrupoIncumbencia=CG.GrupoIncumbencias
--				join tb_reluniongsgu R on r.idgrupounion = G.idGrupoIncumbencia
				join tb_incumbencias h on G.idGrupoINCUMBENCIA=h.grupoIncumbencia
			  WHERE AGENTE=@idAgente AND TipoConcurso = 2 and CG.FechaPresentacion <= @FechaLimite and  (h.CargoGenerico=@Cargogenerico  and h.AsignaturaGenerica=@AsignaturaGenerica or  CG.grupoincumbencias =99) --h.CargoGenerico=@Cargogenerico and h.AsignaturaGenerica=@AsignaturaGenerica -- CUENTO LOS CONCURSOS GANADOS POR TITULOS Y ANTECEDENTES
		SET @Error = @@ERROR 
		IF @Error <> 0 GOTO Salir

			open c
			fetch next from c into @sum
			set @puntaje2=0

			while @@FETCH_STATUS = 0
			begin
				set @puntaje2=@puntaje2+ @sum
				fetch next from c into @sum
			end

			close c
			deallocate c
                                        print 'puntaje2'
			print @puntaje2

			if  @puntaje1 > @topeConcursosB set @puntaje2 = @topeConcursosB --TIENE TOPE DE 4 PUNTOS

		set @pje_total = isnull(@puntaje1 + @puntaje2,0)
  	end
  	else
		if  @idTipoConvocatoria = 2 --    TipoConvocatoria = 2 Ascensos
		begin
			declare c cursor for
			select isnull (2*COUNT(*),0) puntaje1 from  -- CUENTO LOS CONCURSOS  DE ASCENSOS GANADOS
				tb_concursosGanados CG
				join tb_gruposDeIncumbencias G on G.idGrupoIncumbencia=CG.GrupoIncumbencias
--				join tb_reluniongsgu R on r.idgrupounion = G.idGrupoIncumbencia
				join tb_incumbencias h on G.idGrupoINCUMBENCIA=h.grupoIncumbencia
			  WHERE AGENTE=@idAgente AND TipoConvocatoria = 2 and h.CargoGenerico=@Cargogenerico and h.AsignaturaGenerica=@AsignaturaGenerica and CG.FechaPresentacion <= @FechaLimite-- CUENTO LOS CONCURSOS  DE ASCENSOS GANADOS
			union
			select  	isnull (2*COUNT(*),0) puntaje1 from 
				tb_concursosGanados a 
		                 where  agente=@idagente AND TipoConvocatoria = 2 and a.grupoincumbencias =99 and a.FechaPresentacion <= @FechaLimite--sumo todos los artículos que tiene el agente
		SET @Error = @@ERROR 
		IF @Error <> 0 GOTO Salir
			open c
			fetch next from c into @sum
			set @puntaje1=0
			while @@FETCH_STATUS = 0
			begin
				set @puntaje1=@puntaje1+ @sum
				fetch next from c into @sum
			end
			close c
			deallocate c
                                        print 'puntaje1  (Tipo convocatoria 2)'
			print @puntaje1

			if  @puntaje1 > 4 set @puntaje1 = 4 --TIENE TOPE DE 4 PUNTOS

			declare c cursor forward_only for
			select isnull (1*COUNT(*),0) puntaje2 from 
				tb_concursosGanados CG
				join tb_gruposDeIncumbencias G on G.idGrupoIncumbencia=CG.GrupoIncumbencias
--				join tb_reluniongsgu R on r.idgrupounion = G.idGrupoIncumbencia
				join tb_incumbencias h on G.idGrupoINCUMBENCIA=h.grupoIncumbencia
			  WHERE AGENTE=@idAgente AND TipoConvocatoria = 4 and h.CargoGenerico=@Cargogenerico 
				and h.AsignaturaGenerica=@AsignaturaGenerica and CG.FechaPresentacion <= @FechaLimite
			union
			select  	isnull (2*COUNT(*),0) puntaje1 from 
				tb_concursosGanados a 
		                 where  agente=@idagente AND TipoConvocatoria = 4 and a.grupoincumbencias =99 and a.FechaPresentacion <= @FechaLimite --CUENTO LOS CONCURSOS DE ACRECENTAMIENTO GANADOS 

		SET @Error = @@ERROR 
		IF @Error <> 0 GOTO Salir

			open c
			fetch next from c into @sum
			set @puntaje2=0

			while @@FETCH_STATUS = 0
			begin
				set @puntaje2=@puntaje2+ @sum
				fetch next from c into @sum
			end
			close c
			deallocate c
			print 'Puntaje2 (Tipo de convocat 2)'
			print @puntaje2

			if  @puntaje2 > 2 set @puntaje2 = 2 --TIENE TOPE DE 2 PUNTOS

			set @pje_total = isnull(@puntaje1 + @puntaje2,0)
	end
	set @pje=isnull(@pje_total,0)


print 'Puntaje por concursos ganados ' + cast(@pje as varchar)

Salir:
IF @Error <> 0 
	ROLLBACK TRANSACTION
ELSE 
	COMMIT TRANSACTION
GO
GRANT EXECUTE ON  [dbo].[pje_porConcursosGanados] TO [Juntas]
GO
